package mainctrl

import (
	"net/http"
	"web_server/model/mainmodel"
	"web_server/utils"

	"github.com/gin-gonic/gin"
)

func Login(ctx *gin.Context) {
	ctx.HTML(http.StatusOK, "login.html", gin.H{
		"pubkey": utils.GetPubKeyString(),
	})
}

func Logout(ctx *gin.Context) {
	utils.DelSession(ctx)
	ctx.Redirect(http.StatusTemporaryRedirect, "./login")
}

func LoginPost(ctx *gin.Context) {
	r := ctx.Request
	var jsdata struct {
		Namecode string `json:"namecode"`
		Password string `json:"password"`
	}
	if err := utils.B64RsaJsonDecrypt(r.FormValue("data"), &jsdata); err != nil {
		ctx.JSON(0, gin.H{
			"status": false,
			"msg":    "用户名密码格式错误",
		})
		return
	}
	namecode := jsdata.Namecode
	password := jsdata.Password

	if len(namecode) < 5 || len(namecode) > 10 || len(password) < 5 || len(password) > 15 {
		ctx.JSON(0, gin.H{
			"status": false,
			"msg":    "用户名密码格式错误",
		})
		return
	}
	if !mainmodel.LoginCheck(namecode, password) {
		ctx.JSON(0, gin.H{
			"status": false,
			"msg":    "用户名密码错误",
		})
	} else {
		ses, _ := utils.GetSession(ctx)
		utils.SetSession(ses, mainmodel.LoginAction(namecode))
		ctx.JSON(http.StatusOK, gin.H{
			"status": true,
		})
	}
}

func Index(ctx *gin.Context, user mainmodel.UserModel) {
	ctx.HTML(http.StatusOK, "index.html", gin.H{
		"um":   user,
		"menu": mainmodel.GetRoleMenu(user.Role),
	})
}

func Welcome(ctx *gin.Context, user mainmodel.UserModel) {
	ctx.HTML(http.StatusOK, "welcome.html", nil)
}

func EditPsw(ctx *gin.Context, user mainmodel.UserModel) {
	ctx.HTML(http.StatusOK, "editpsw.html", gin.H{
		"um":     user,
		"pubkey": utils.GetPubKeyString(),
	})
}

func EditPswPost(ctx *gin.Context, user mainmodel.UserModel) {
	r := ctx.Request
	var jsdata struct {
		Password string `json:"password"`
	}
	if err := utils.B64RsaJsonDecrypt(r.FormValue("data"), &jsdata); err != nil {
		ctx.JSON(0, gin.H{
			"status": false,
			"msg":    "密码格式错误",
		})
		return
	}
	if len(jsdata.Password) < 5 || len(jsdata.Password) > 15 {
		ctx.JSON(0, gin.H{
			"status": false,
			"msg":    "密码格式错误",
		})
		return
	}
	if err := mainmodel.SetUserPsw(jsdata.Password, user.Id); err != nil {
		ctx.JSON(0, gin.H{
			"status": false,
			"msg":    "修改失败: " + err.Error(),
		})
		return
	}
	ctx.JSON(http.StatusOK, gin.H{
		"status": true,
	})
}
